package leetcodev1.字符串;

import leetcodev1.链表.Solution;

public class LeetCode12 {

    int[] nums = new int[]{1000, 500, 100, 50, 10, 5, 1};
    char[] chars = new char[]{'M', 'D', 'C', 'L', 'X', 'V', 'I'};

    public String intToRoman(int num) {
        int length = nums.length;
        StringBuilder ret = new StringBuilder();
        while (num != 0) {
            for (int i = 0; i < length; i++) {
                int num1 = nums[i];

                if (num >= num1) {
                    num -= num1;
                    ret.append(chars[i]);
                    break;
                }

                if (num1 % 10 == 0 && i + 2 < length && num >= num1 - nums[i + 2]) {
                    num -= num1 + nums[i + 2];
                    ret.append(chars[i + 2]).append(chars[i]);
                    break;
                } else if (num1 % 10 != 0 && i + 1 < length && num >= num1 - nums[i + 1]) {
                    num -= num1 + nums[i + 1];
                    ret.append(chars[i + 1]).append(chars[i]);
                    break;
                }
            }
        }
        return ret.toString();
    }
}

class Answer12 {

    //方法1 模拟
    //将所有情况模拟处理出来 而不是硬编码
    //模拟也是一个好办法
    int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};

    public String intToRoman(int num) {
        StringBuffer roman = new StringBuffer();
        for (int i = 0; i < values.length; ++i) {
            int value = values[i];
            String symbol = symbols[i];
            while (num >= value) {
                num -= value;
                roman.append(symbol);
            }
            if (num == 0) {
                break;
            }
        }
        return roman.toString();
    }

    //这个...M超过3个就不够用了
    String[] thousands = {"", "M", "MM", "MMM"};
    String[] hundreds = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    String[] tens = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    String[] ones = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};

    public String intToRoman1(int num) {
        StringBuffer roman = new StringBuffer();
        roman.append(thousands[num / 1000]);
        roman.append(hundreds[num % 1000 / 100]);
        roman.append(tens[num % 100 / 10]);
        roman.append(ones[num % 10]);
        return roman.toString();
    }
}
